/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.controlador;

import br.com.modelo.Caixa;
import com.t2tierp.pafecf.bd.AcessoBanco;
import java.io.Serializable;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import util.JPAUtil;
import util.JSFUtil;

/**
 *
 * @author gilberto.costa
 */
@ManagedBean
@ViewScoped
public class CaixaControler implements Serializable {

    private Caixa caixa;
    private String campoBusca;
    private List<Caixa> listCaixas = new ArrayList<Caixa>();
    private Boolean alterando = false;

    @PostConstruct
    public void init() {
        listCaixas = Caixa.retornaCaixas();
    }

    public void inicializaObj() {
        alterando = false;
        caixa = new Caixa();
    }

    public void alterar() {
        alterando = false;
    }

    public void salvar() {
        try {
            caixa = caixa.salvar();
            listCaixas = Caixa.retornaCaixas();
            JSFUtil.addMessageSucesso("Caixa Salvo!!");
            //retornando caixas e salvando nos caixas
            List<Caixa> caixas = CaixaControler.retornaCaixa();
            for (Caixa c : caixas) {
                Connection con = JPAUtil.conectaBanco(c.getIp());
                if (con != null) {
                    this.caixa = this.caixa.salvarCaixas(c.getIp());
                    JSFUtil.addMessageSucesso("Transferido para caixa(" + c.getNome() + ")");
                }
            }
            org.primefaces.context.RequestContext.getCurrentInstance().execute("dlgCaixa.hide();");
        } catch (Exception e) {
            JSFUtil.addMessageSucesso("Problema ao cadastrar caixa!!" + e);
        }
    }

    public void excluir() {
        try {
            //excluindo nos caixas
            List<Caixa> caixas = CaixaControler.retornaCaixa();
            for (Caixa c : caixas) {
                Connection con = JPAUtil.conectaBanco(c.getIp());
                if (con != null) {
                    caixa.excluirCaixas(c.getIp());
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Transferido para caixa(" + c.getNome() + ")", "Mensagem"));
                }
            }
            caixa.excluir();
            listCaixas = Caixa.retornaCaixas();
org.primefaces.context.RequestContext.getCurrentInstance().execute("dlgCaixa.hide();");
        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Erro ao excluir caixa!!" + e, "Mensagem"));
        }
    }

//    public void realizaBusca() {
//        listCaixas = Caixa.retornaBusca(campoBusca);
//    }
    public void inicializaBusca() {
        setCampoBusca(new String());
    }

    /**
     * @return the caixa
     */
    public Caixa getCaixa() {
        return caixa;
    }

    /**
     * @param caixa the caixa to set
     */
    public void setCaixa(Caixa caixa) {
        alterando = true;
        this.caixa = caixa;
    }

    /**
     * @return the listCaixas
     */
    public List<Caixa> getListCaixas() {
        return listCaixas;
    }

    /**
     * @param listCaixas the listCaixas to set
     */
    public void setListCaixas(List<Caixa> listCaixas) {
        this.listCaixas = listCaixas;
    }

    /**
     * @return the campoBusca
     */
    public String getCampoBusca() {
        return campoBusca;
    }

    /**
     * @param campoBusca the campoBusca to set
     */
    public void setCampoBusca(String campoBusca) {
        this.campoBusca = campoBusca;
    }

    public void verificaConexao() {
        try {
            AcessoBanco con = new AcessoBanco();
            con.conectar(caixa.getIp());
            if (con != null) {
                con.desconectar();
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Conexão OK", "Mensagem"));
            } else {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Sem Conexão", "Mensagem"));
            }
        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Sem Conexão", "Mensagem"));
        }
    }

    public static List<Caixa> retornaCaixa() {
        EntityManager em = JPAUtil.retornarFabrica().createEntityManager();
        Query q = em.createQuery("FROM Caixa");
        List<Caixa> list = q.getResultList();
        em.close();
        return list;
    }

    public Boolean getAlterando() {
        return alterando;
    }

    public void setAlterando(Boolean alterando) {
        this.alterando = alterando;
    }
}
